﻿using System;

namespace Borg
{
    public interface ILogger : IDisposable
    {
        void Init(Runtime runtime);

        void LogContractAdded(ContractEventArgs args);
        void LogContractRemoved(ContractEventArgs args);

        void LogPluginAdded(PluginEventArgs args);
        void LogPluginRemoved(PluginEventArgs args);

        void LogUnhandledException(ExceptionEventArgs args);

        void LogCreated(ExtensionEventArgs args);
        void LogActivated(ExtensionEventArgs args);
        void LogDeactivated(ExtensionEventArgs args);
        void LogDestroyed(ExtensionEventArgs args);

        void LogOpened(SlotEventArgs args);
        void LogClosed(SlotEventArgs args);

        void LogPlugged(CompositionEventArgs args);
        void LogUnplugged(CompositionEventArgs args);

        void LogTagged(TagEventArgs args);
        void LogUntagged(TagEventArgs args);

        void Log(LogArgs args);
        void Log(CustomLogArgs args);
    }
}
